<?php

/**
 * Description of ConviteAction
 *
 * @author Magno
 */
class ConviteAction extends ActionDefault {

    private $conviteService;
    private $statusService;
    public static $VIEW_CONVITE = "view/convite/";

    function ConviteAction() {
        parent::__construct();
        $this->conviteService = new ConviteService();
        $this->statusService = new StatusService();
    }

    public function buscar() {
        
    }

    public function cadastro() {}

    public function detalhes($conviteID) {
        
    }

    public function editar($conviteID) {
        
    }

    public function excluir($conviteID) {
        try{

            if($conviteID <= 0){
                parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, "Código do Convite Não Encontrado!!!"));
                parent::voltar();
                return;
            }

            $clienteBean = $this->conviteService->buscarPorID($conviteID,true);

            if($clienteBean == null){
                parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, "Convite Não Encontrado!!!"));
                parent::voltar();
                return;
            }

            $clienteBean->setStatus($this->statusService->buscarPorID(Constantes::$ST_CONV_EXCLUIDO));

            $this->conviteService->salvar($clienteBean);

            parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_SUCCESS, Constantes::$STR_MSG_SUCCESS));
            parent::chain('ConviteAction.listar');

        }catch(Exception $ex){
            parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, $ex->getMessage()));
            parent::voltar();
        }
    }

    public function listar() {
        parent::setValueOutput('status', Util::arrayCombo($this->statusService->listar(0, Constantes::$STATUS_CONVITE), 'statusID', 'descricao',' -- TODOS --'));
        $this->buscaListaPaginada();        
    }

    public function tabela($pagina = 1, $email = "", $statusID = -1) {
        $this->buscaListaPaginada($pagina, $email, $statusID);
        parent::show($this->getView().'tabela.tpl');
    }
    
    private function buscaListaPaginada($pagina = 1, $email = "", $statusID = -1){

        $convites = $this->conviteService->listar($pagina, $email, -1, $statusID, true);
        $total = $this->conviteService->total($email, -1, $statusID);

        parent::setValueOutput('convites', $convites);
        parent::setValueOutput('pagina', $pagina); 
        parent::setValueOutput('numPaginas', Util::calculaNumPaginas($total));
        
    }

    public function salvar($mensagem) {
        
        include_once 'include/php/addendum/annotations.php';
        
        try {
            $emails = explode("\n", parent::getValueInput('emails'));
                        
            $emailValidator = new EmailValidator();
            $errosValidacao = array();
            $convites = array();
            $emailsAux = array();
            
            #$clienteBean = parent::getUserSession();
            $clienteBean = new ClienteBean(12); //soh p testess
            
            $statusBean = $this->statusService->buscarPorID(Constantes::$ST_CONV_NAO_ACEITO);
            
            for ($i = 0; $i < count($emails); $i++) {
                
                try {
                    
                    $emails[$i] = trim($emails[$i]);
                    
                    if(EmailService::existeEmailArray($emails[$i], $emailsAux)){
                        parent::setValueOutput("msg",new MensagemMeta(Constantes::$MSG_ERROR, "Erro, Você não pode fornecer o mesmo email mais de uma vez!!!"));
                        parent::voltar();
                        return;
                    }
                    
                    $emailValidator->validate($emails[$i]);
                    $emailsAux[] = $emails[$i];
                    $convites[] = new ConviteBean(0, $emails[$i], $mensagem, $clienteBean, null, $statusBean);
                    
                } catch (ValidatorException $ve) {
                    $errosValidacao[] = new ErroMeta('', '', $emails[$i].' - '.$ve->getMessage()); 
                }
                
            }
            
            if(count($errosValidacao) > 0){
                parent::setValueOutput(BaseAction::$ERROS_VALIDACAO, $errosValidacao);
                parent::voltar();
                return;
            }
            
            
            $convites = $this->conviteService->salvarConvites($convites);
            
            $this->conviteService->enviarConvites($convites);

            die('ok');

        } catch (Exception $ex) {
            parent::setValueOutput(Constantes::$MSG_ERROR, $ex->getMessage());
            parent::voltar();
        }
    }

    public function getView() {
        return ConviteAction::$VIEW_CONVITE;
    }

}

?>

